package operators;

public class BitwiseOperators {
    public static void main(String[] args) {
        int a = 6;  // 二进制: 0110
        int b = 3;  // 二进制: 0011

        // 按位与（&）：对应位都为1则为1，否则为0
        int andResult = a & b;  // 0010（十进制2）
        System.out.println("a & b = " + andResult);

        // 按位或（|）：对应位有一个为1则为1
        int orResult = a | b;   // 0111（十进制7）
        System.out.println("a | b = " + orResult);

        // 按位异或（^）：对应位不同则为1，相同则为0
        int xorResult = a ^ b;  // 0101（十进制5）
        System.out.println("a ^ b = " + xorResult);

        // 按位非（~）：每一位取反（包括符号位）
        int notResult = ~a;     // 1001（十进制-7，考虑补码）
        System.out.println("~a = " + notResult);

        // 左移（<<）：将二进制位向左移动指定位数，右边补0
        int leftShift = a << 1; // 1100（十进制12）
        System.out.println("a << 1 = " + leftShift);

        // 右移（>>）：将二进制位向右移动指定位数，左边补符号位
        int rightShift = a >> 1; // 0011（十进制3）
        System.out.println("a >> 1 = " + rightShift);

        // 无符号右移（>>>）：向右移动，左边补0（不考虑符号位）
        int num = -8;           // 二进制: 11111111 11111111 11111111 11111000
        int unsignedRightShift = num >>> 1;
        System.out.println("num >>> 1 = " + unsignedRightShift);  // 2147483644
    }
}
